package br.com.it4.zmed.entity;

import java.util.Date;
import java.util.List;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

/**
 * Entidade básica representando o atendimento.
 * 
 * @author Mozart Silva (mozart.vsilva@gmail.com)
 * 
 */
@Entity
@Table(name = "ZME_ATENDIMENTO", schema = "ZMED")
public class Atendimento {

    /** O código do atendimento. */
    @Id
    @SequenceGenerator(name = "SEQ_ZME_ATENDIMENTO_ID", sequenceName = "ZMED.SEQ_ZME_ATENDIMENTO")
    @GeneratedValue(generator = "SEQ_ZME_ATENDIMENTO_ID", strategy = GenerationType.SEQUENCE)
    @Column(name = "ATE_CODIGO")
    private Long codigo;

    @Temporal(TemporalType.DATE)
    @Column(name = "ATE_DATA")
    private Date data;

    /** O paciente do atendimento. */
    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "PAC_CODIGO")
    private Paciente paciente;

    /** O convênio do paciente no atendimento. */
    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "CON_CODIGO")
    private Convenio convenio;

    /** O laudos gerados no atendimento. */
    @OneToMany(mappedBy = "atendimento")
    private List<Laudo> laudos;

    /**
     * @return O codigo a ser recuperado.
     */
    public Long getCodigo() {
        return codigo;
    }

    /**
     * @param codigo
     *            O codigo a ser atribuido.
     */
    public void setCodigo(Long codigo) {
        this.codigo = codigo;
    }

    /**
     * @return O data a ser recuperado.
     */
    public Date getData() {
        return data;
    }

    /**
     * @param data
     *            O data a ser atribuido.
     */
    public void setData(Date data) {
        this.data = data;
    }

    /**
     * @return O paciente a ser recuperado.
     */
    public Paciente getPaciente() {
        return paciente;
    }

    /**
     * @param paciente
     *            O paciente a ser atribuido.
     */
    public void setPaciente(Paciente paciente) {
        this.paciente = paciente;
    }

    /**
     * @return O convenio a ser recuperado.
     */
    public Convenio getConvenio() {
        return convenio;
    }

    /**
     * @param convenio
     *            O convenio a ser atribuido.
     */
    public void setConvenio(Convenio convenio) {
        this.convenio = convenio;
    }

    /**
     * @return O laudos a ser recuperado.
     */
    public List<Laudo> getLaudos() {
        return laudos;
    }

    /**
     * @param laudos
     *            O laudos a ser atribuido.
     */
    public void setLaudos(List<Laudo> laudos) {
        this.laudos = laudos;
    }

}
